<?php

define( 'REXZY_ROOT', __DIR__ );  //根目录
define( 'DEBUG', false );  //调试模式

class Rexzy {
    static private $_rexzy;
    static private $_isInit = false;
    
    /**
     * 初始化核心类
     * 方法只能调用一次
     * 
     * @var $this->_isInit bool 判断方法是否第一次被调用
     */
    static public function init() {
        if ( self::$_isInit == false ) {
            require_once REXZY_ROOT . '/Base/Core.php';
            self::$_rexzy = new Rexzy\Base\Core();
            self::$_rexzy->init();
            self::$_isInit = true;
        }
    }
    
    /**
     * 获取配置参数
     * 
     * @param var $configuration 配置参数的键名，为null时return所有配置项
     * @return array 配置项的值
     */
    static public function getConfig( $configuration = null ) {
        if ( is_null( $configuration ) ) {
            return self::$_rexzy->config;
        }
        return self::$_rexzy->config[ $configuration ];
    }
    
    /**
     * 转换为URL 的函数
     * 
     * @param string $rule 要转换的 path
     * @return string 转换后的真正链接
     */
    static public function url( $rule ) {
        $ruleConfig = self::$_rexzy->ruleConfig;
        if ( $ruleConfig['rewrite'] == true ) {
            $url = $ruleConfig['host'];
        } else {
            $url = $ruleConfig['host'] . 'index.php/';
        }
        
        if ( $ruleConfig['type'] == 'pathInfo' ) {
            $url = $url . $rule;
        } else if ( $ruleConfig['type'] == 'get' ) {
            $url = $url . '?r=' . $rule; 
        }
        return $url;
    }
    
    /**
     * 返回添加前缀后的数据表的名称 
     * 
     * @param type $tableName 数据表名称
     * @return string 返回添加数据库前缀后的数据表名称
     */
    static public function tb( $tableName ) {
        return self::getConfig('dbPR') . "_" . $tableName;
    }
    
    /**
     *  实例数据处理对象的函数
     * 
     * @param string $modelName 需要实例的类名称
     * @return object 实例的数据处理对象
     */
    static public function model( $tableName ) {
        $modelName = preg_replace_callback( '/(_)(\w)/', function( $matches ) {
            return ucwords( $matches[2] );
        }, $tableName );
        $modelFile = APP_PATH . '/Module/'. self::$_rexzy->module . '/Model/' . $modelName .'.php';
       
        if ( file_exists( $modelFile ) ) {
            $className = "Rblog\Module\\" . self::$_rexzy->module . "\Model\\" . $modelName;
            return new $className();
        }
        else {
            return new \Rexzy\App\Model( $tableName );
        }
    }
    
    /**
     * 核心类 Core 属性值的查询
     * 
     * @param string  $name 查询属性的名称
     * @return string 返回查询的值
     */
    static public function getCore( $name ) {
        return self::$_rexzy->$name;
    }
}



